package com.yhc.user.server.interceptor;

import com.yhc.common.util.ServletUtil;
import com.yhc.user.server.consts.RequestHeader;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import io.seata.core.context.RootContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;

import javax.servlet.http.HttpServletRequest;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;

@Slf4j
@Configuration
public class FeignHeaderInterceptor implements RequestInterceptor {


    /**
     * 透传requestid、txtime、token
     *
     * @param template
     */
    @Override
    public void apply(RequestTemplate template) {
        log.info("FeignHeaderRequestInterceptor");

        HttpServletRequest request = ServletUtil.getRequest();


//        Enumeration<?> e = request.getHeaderNames();
//        while (e.hasMoreElements()) {
//            String key = e.nextElement().toString();
//            String value = request.getHeader(key);
//            log.info("# {} -> {}", key, value);
//        }
//
//        Map<String, Collection<String>> map = template.headers();
//        for(String key : map.keySet()){
//            log.info("#1 {} -> {}", key , map.get(key).toString());
//        }

        template.header(RequestHeader.REQUEST_ID, request.getHeader(RequestHeader.REQUEST_ID));
        template.header(RequestHeader.USER_TOKEN, request.getHeader(RequestHeader.USER_TOKEN));
        template.header(RequestHeader.TX_TIME, request.getHeader(RequestHeader.TX_TIME));

        // 解决seata的xid未传递
        String xid = RootContext.getXID();
        template.header(RootContext.KEY_XID, xid);
    }

}
